Conventional printers, for example commercial computer printers for use in the office or home for printing out images in general including photographs, drawings, text, web pages and the like, and commercial printers for high quality drawings printing, use a process of digital halftoning to convert electronic image data into print instructions sent to a printer head in order to print a plurality of small dots onto a print medium e.g. paper, to create an image on the print medium. Typically for text or line drawings, half-toning is not needed, because lines are printed solid, however half-toning is used for printing images having varying shades of color or gray, such as photographs. Conventional digital half-toning methods are well known in the prior art.
Referring to FIG. 1 herein, there is illustrated schematically signal processing involved in a conventional half-toning process. Image data is stored as electronic signals in an electronic buffer. The image data is arranged in a plurality of image planes, each image plane corresponding to a color which is to be printed. In the example of FIG. 1, there are four image planes 100–103, corresponding to cyan, magenta, yellow and black respectively. Each image plane comprises a two dimensional array of pixels, where each pixel has an intensity according to a gray scale having, for instance, 256 levels stored as one byte of gray scale information per pixel.
Referring to FIG. 2 herein, there is illustrated a signal processing stage for applying a halftone matrix data to one of the image planes shown in FIG. 1. The matrix data has 4 matrix planes, corresponding with the 4 color planes of the image data. The halftone matrix plane comprises a two dimensional array of a plurality of data elements each data element comprising a halftone threshold value. Each pixel of the image plane 100 is aligned with a corresponding respective halftone value in a two dimensional halftone matrix plane 200 so there is one halftone threshold value for each pixel. An N×N element halftone matrix is tiled across the image, which is typically larger than N×N elements, so that every threshold value is aligned with one pixel value. Tiling the halftone matrix allows use of a halftone matrix which is smaller than an image size. Typically, a halftone matrix has a plurality of threshold values of different value arranged in a semi-random order in two-dimensions. Each image plane has its own corresponding respective halftone matrix plane, and one such relationship between an image plane 100 and a halftone matrix plane 200 is shown in FIG. 2. Each element in the halftone matrix plane 200, has a halftone threshold value, which is graded according to an 8 bit value, that is 256 levels of halftone threshold. A complete image in 4 colors would have 32 bit resolution, that is to say 8 bits per pixel per plane.
The halftone threshold matrix determines whether a dot will be printed or not printed, for the corresponding respective pixel of the image plane. The data from the image plane is combined with the data in the corresponding halftone threshold matrix plane, to result in a planar print data 201 which comprises a matrix of signals to either print or not print a dot at a corresponding X, Y coordinate of the plane. For example, where an image data in the image plane has a 50% gray level, that is to say the pixels of the image each have a value of 127, where there are 256 possible gray levels, the resulting print data in the print plane 201 will have dots printed for approximately 50% of the pixels in the image plane, and the other 50% of the pixels in the image plane will not have corresponding printed dots in the print plane 201. The halftone matrix as such is not set to one value or another. Each individual threshold value, together with the image value, determines which pixels are printed.
Referring to FIG. 3 herein, there are illustrated prior art image processing steps carried out by a processor in a printer system for dynamically generating a print plane 201 for printing an image. Each pixel intensity value of the image plane 100 is compared with the corresponding respective halftone threshold value of the halftone matrix plane 200. In step 300 the image plane and halftone threshold plane are aligned with each other. The pixels of the image plane are compared with the corresponding respective elements of the halftone threshold matrix plane by scanning across the image plane left to right and top to bottom, in step 301, to obtain a 1:1 correspondence between each pixel and a respective element of the halftone threshold matrix in step 302. The value of each pixel is compared with a corresponding element value in the halftone threshold plane 200 in step 303. If the pixel value is more than the corresponding respective halftone matrix threshold value in step 304, then a print data is stored in the print plane 201 indicating that the pixel is to be printed, and a corresponding dot is printed. However, if the pixel value is less than the corresponding respective halftone threshold value, then in step 305 data is stored in the print plane 201, indicating that the pixel is not to be printed, and a dot is not sent to print.
Each threshold value in the matrix has 8 bits, so that each 8 bit pixel in each color image plane is compared with a corresponding respective 8 bit threshold value in the corresponding halftone threshold matrix plane for that color. Conventionally, prior art 8 bit per pixel halftone threshold matrices are created off line to suit the performance and other characteristics of a print system, and are stored in read only memory (ROM), or on disk, and are invariant over time. That is, once generated, the stored halftone threshold matrices are not changed in the printer device. Once the halftone matrix is generated, it is repeatedly used and is not changed.
It is desirable from performance and image quality stand points to have a halftone matrix that is linear. Linear means that a system response is linear with respect to digital counts input to a halftoning module. Since system response varies with environment, print cartridge setting, medium and the like, it is desirable to have the ability to dynamically vary the linearization depending upon the state of the printer system.
Referring to FIG. 4 herein, there is illustrated schematically prior art signal processing for producing a tone corrected image. A target response 400 corresponding to an ideal print head response is either stored within the printer device or defined analytically. An actual response curve 401 is measured by performing a calibration test. A calibration function (otherwise called a linearization function) is applied, with knowledge of the target response 400 and actual response 401. The calibration function (linearization function) is applied to an image data 403 in step 404, resulting in a modified image data 405. The modified image data is half-toned in step 406, which is then sent as a signal to a printer head to print in step 407 .
Conventionally, the linearization is applied to the image data before half-toning as shown in FIG. 4. For example, whenever an image data input, for example, 80% intensity is received, in order to obtain the ideal response, the 80% image data input is substituted by, say for example, 60% of the image data, according to the calibration function. In the prior art, the modified image data is then half-toned prior to printing.
A known technique involves using a look up vector to change the input data before halftoning. The vector is changed depending on the linearization required. However, this technique often introduces unwanted contouring in an output plot. If the correction is strong, unique states of the input data are lost.
Another known approach is to generate a halftone matrix which is inherently linearized with respect to a given set of conditions by modifying the number of dots printed for each input image gray level. Since conditions vary, the matrix should, in principle, be regenerated from time to time after the product leaves the factory. However some forms of halftone matrices are expensive in terms of time and/or memory to generate, which renders them ill-suited to dynamic generation in a printer product.
Using predefined matrices for every possible linearization is not reasonable, as it would be prohibitive to store the required number of matrices in a printer product.